// #include<iostream>
// #include <ostream>
// #include<string>
// #include<set>
// #include<algorithm>
// #include<bitset>
//
// using namespace std;
// //set 集合
// //具有排序性
// //具有去重性
//
// template<typename T,typename _pr=less<T>>
// void print_list(set<T,_pr>& l)
// {
//     for (auto& v: l)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
// }
// template<typename T,typename _pr=less<T>>
// void print_list(multiset<T,_pr>& l)
// {
//     for (auto& v: l)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
// }
//
// void test_set()
// {
//     set<int> num;
//     set<int> value = {1,4,3,2};
//     for (auto& v: value)
//     {
//         cout << v << "\t";
//     }
//     cout << endl;
//
//
//     set<int,greater<int>> t = {1,4,3,2};
//     t.insert(1);
//     t.insert(1);
//     t.insert(2);
//     t.insert(3);
//     print_list(t);
//
//     cout << t.size() << endl;
//
//     cout << t.empty() << endl;
//
//
//     auto res = t.find(1);
//     if (res!=t.end())
//     {
//         t.erase(res);
//     }
//     print_list(t);
// }
//
// void test_multiset()
// {
//     //排序行
//     multiset<int> mt;
//     mt.insert(1);
//     mt.insert(1);
//     mt.insert(2);
//     mt.insert(3);
//     print_list(mt);
// }
//
// class MM
// {
// public:
//     MM() = default;
//     MM(string name):name(name)
//     {
//
//     }
//
//     MM(const string& name, int age)
//         : name(name),
//           age(age)
//     {
//     }
//
//     string name1() const
//     {
//         return name;
//     }
//
//     void set_name(const string& name)
//     {
//         this->name = name;
//     }
//
//     int age1() const
//     {
//         return age;
//     }
//
//     void set_age(int age)
//     {
//         this->age = age;
//     }
//
//     friend bool operator<(const MM& lhs, const MM& rhs)
//     {
//         return lhs.age < rhs.age;
//     }
//
//     friend bool operator<=(const MM& lhs, const MM& rhs)
//     {
//         return !(rhs < lhs);
//     }
//
//     friend bool operator>(const MM& lhs, const MM& rhs)
//     {
//         return rhs < lhs;
//     }
//
//     friend bool operator>=(const MM& lhs, const MM& rhs)
//     {
//         return !(lhs < rhs);
//     }
//
//     friend std::ostream& operator<<(std::ostream& os, const MM& obj)
//     {
//         return os
//             << "name: " << obj.name
//             << " age: " << obj.age;
//     }
//
//
// protected:
//     string name;
//     int age;
// };
//
// struct compare_with_age
// {
//     bool operator()(const MM& one,const MM& two)const
//     {
//         return one.age1()<two.age1();
//     }
// };
// bool operator==(const MM& object,const string& str)
// {
//     return object.name1()==str;
// }
//
//
// void test_user_data()
// {
//     set<MM> s;
//     s.insert(MM("1",1));
//     s.insert(MM("0",0));
//     print_list(s);
//
//     set<MM,compare_with_age> t;
//     t.insert(MM("1",1));
//     t.insert(MM("0",0));
//     t.insert(MM("3",2));
//     print_list(t);
//
//     // auto pos = find(t.begin(),t.end(),string("1"));
//     auto pos = find_if(t.begin(),t.end(),[](const MM& object)
//     {
//         return object.name1()=="1";
//     });
//     if (pos!=t.end())
//     {
//         cout << "找到" << endl;
//     }
// }
//
// void test_bit_set()
// {
//     bitset<8> bit("10110111");
//     cout << bit << endl;
//     bit.flip();
//     cout << bit << endl;
// }
//
// int main()
// {
//     // test_set();
//     // test_multiset();
//
//     // test_user_data();
//     test_bit_set();
//     return 0;
// }